class BootstrapTable {

	static loading = null;

	/**
	 * 要请求的表名
	 */
	static options = {
		status_api: 'fieldStatus',
		url: null,
		operate: {
			delete: true,
			status: true,
			update: true
		}
	};

	/**
	 * 表格相关的配置
	 **/
	static table_options = window.bootstrap_table_options;

	/**
	 * 用于演示的列信息
	 **/
	static columns;

	static init() {
		// 请求地址
		this.initColumns();
		this.table_options.url = this.options.url;
		this.table_options.columns = this.columns;
		this.bootstrapTable = $('table').bootstrapTable({
			...this.table_options,
			onLoadSuccess: function (data) {
				if ($('.tooltip').length > 0) $('.tooltip').remove() // 删除已经存在的提示
				$("[data-bs-toggle='tooltip']").tooltip({container: 'body'}); // 提示初始化
				if (this.loading) this.loading.destroy();
				if ($('.selectpicker').length > 0) $('.selectpicker').selectpicker(); // 下拉菜单初始化
			}
		});
	}

	/**
	 * 删除函数
	 */
	static delete(row) {
		console.log(row);
		$.alert({
			title: '删除提示',
			content: '确定要删除 ' + row.title + ' 吗？',
			icon: 'mdi mdi-alert',
			type: 'orange',
			animation: 'scale',
			closeAnimation: 'scale',
			width: '1000px',
			draggable: true,
			backgroundDismiss: true,
			buttons: {
				determine: {
					text: '确定',
					action: () => {
						var uniqueId = this.table_options.uniqueId;
						$.ajax({
							'url': 'api.php?action=deleteTable',
							'type': 'get',
							'data': {
								table: this.table,
								[uniqueId]: row[uniqueId]
							},
							beforeSend: () => {
								this.loading = this.bootstrapTable.lyearloading({
									spinnerSize: 'lg'
								});
							},
							success: (data) => {
								this.loading.destroy();
								if (data.code == 200) {
									this.loading = this.bootstrapTable.lyearloading({});
									$('table').bootstrapTable('refresh', {
										silent: true//静态刷新
									})
								} else {
									$.alert(data.message);
								}
							}
						})
					}
				},
				cancellation: {
					text: '取消',
					btnClass: 'btn-blue'
				}
			}
		});
	}

	/**
	 * 调整状态函数
	 * @param {object} row
	 */
	static status(row) {
		var loading;
		var uniqueId = this.table_options.uniqueId;
		$.ajax({
			'url': this.options.status_api,
			'type': 'post',
			'data': {
				table: this.table,
				[uniqueId]: row[uniqueId]
			},
			beforeSend: () => {
				loading = this.bootstrapTable.lyearloading({
					spinnerSize: 'lg'
				});
			},
			success: (data) => {
				loading.destroy();
				if (data.code == 200) {
					this.loading = this.bootstrapTable.lyearloading({});
					$('table').bootstrapTable('refresh', {
						silent: true//静态刷新
					});
				} else {
					$.alert(data.message);
				}
			}
		})
	}

	/**
	 * 编辑列函数
	 * @param {object} row
	 */
	static update(row) {
		var uniqueId = this.table_options.uniqueId;
		let url = location.href + `?mod=update&${uniqueId}=${row[uniqueId]}`;
		let title = row.title ? ('编辑 ' + row.title) : '编辑';
		YiHang.iframe(url, title, this.options.iframe);
	}

	static initColumns() {
		// this.columns.unshift({
		// 	checkbox: true,
		// 	// 列的宽度
		// 	width: 5,
		// 	// 宽度单位
		// 	widthUnit: 'rem'
		// })
		this.columns.unshift({
			field: this.table_options.uniqueId,
			title: '编号',
			// 使用[align]，[halign]和[valign]选项来设置列和它们的标题的对齐方式。
			// h表示横向，v标识垂直
			align: 'center',
			// 是否作为排序列
			sortable: true,
			// 当列名称与实际名称不一致时可用
			sortName: this.table_options.uniqueId,
			// switchable: false,
			// 是否可视(默认 - true)
			visible: false,
			// 列的宽度
			width: 5,
			// 宽度单位
			widthUnit: 'rem'
		});
		if (this.options.operate.status) {
			this.columns.push({
				field: 'status',
				title: '状态',
				sortable: true,
				// 列的宽度
				width: '70',
				// 宽度单位
				widthUnit: 'px',
				align: 'center',
				formatter: function (value, row, index) {
					var value = "";
					if (row.status == '0') {
						value = '<span class="badge bg-danger status-button" title="点击激活" data-bs-toggle="tooltip" data-bs-placement="top">禁用</span>';
					} else if (row.status == '1') {
						value = '<span class="badge bg-success status-button" title="点击禁用" data-bs-toggle="tooltip" data-bs-placement="top">正常</span>';
					} else {
						value = row.pType;
					}
					return value;
				},
				events: {
					'click .status-button': (event, value, row, index) => {
						this.status(row, event);
					}
				}
			})
		}

		if (this.options.operate.delete && this.options.operate.update) {
			this.columns.push({
				title: '操作',
				// 列的宽度
				width: '95',
				// 宽度单位
				widthUnit: 'px',
				align: 'center',
				formatter: (value, row) => {
					let html = `<span style="margin-right:5px" data-bs-toggle="tooltip" data-bs-placement="top" class="btn btn-sm btn-teal edit-btn" title="编辑"><i class="mdi mdi-pencil"></i></span>` +
						'<span class="btn btn-sm btn-danger del-btn" title="删除" data-bs-toggle="tooltip" data-bs-placement="top"><i class="mdi mdi-window-close"></i></span>';
					return html;
				}, // 自定义方法
				events: {
					'click .edit-btn': (event, value, row, index) => {
						this.update(row, event);
					},
					'click .del-btn': (event, value, row, index) => {
						this.delete(row, event);
					}
				}
			})
		} else if (this.options.operate.delete) {
			this.columns.push({
				title: '操作',
				// 列的宽度
				width: '95',
				// 宽度单位
				widthUnit: 'px',
				align: 'center',
				formatter: (value, row) => {
					let html = '<span class="btn btn-sm btn-danger del-btn" title="删除" data-bs-toggle="tooltip" data-bs-placement="top"><i class="mdi mdi-window-close"></i></span>';
					return html;
				}, // 自定义方法
				events: {
					'click .del-btn': (event, value, row, index) => {
						this.delete(row, event);
					}
				}
			})
		} else if (this.options.operate.update) {
			this.columns.push({
				title: '操作',
				// 列的宽度
				width: '95',
				// 宽度单位
				widthUnit: 'px',
				align: 'center',
				formatter: (value, row) => {
					let html = `<span style="margin-right:5px" data-bs-toggle="tooltip" data-bs-placement="top" class="btn btn-sm btn-teal edit-btn" title="编辑"><i class="mdi mdi-pencil"></i></span>`;
					return html;
				}, // 自定义方法
				events: {
					'click .edit-btn': (event, value, row, index) => {
						this.update(row, event);
					}
				}
			})
		}
	}
}